var id = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
var email = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
var phone = /^1[3456789]\d{9}$/
var fax = /^(\d{3,4}-)?\d{7,8}$/
var url = /^(((ht|f)tps?):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?$/
var FormValidate = (function () {
  function FormValidate () {}
  // From表单验证规则  可用于公用的校验部分

  FormValidate.Form = function () {
    return {
      // 邮箱的验证规则
      Email: function (rule, value, callback) {
        if (!value) {
          return callback(new Error('邮箱不能为空'))
        }

        if (!email.test(value)) {
          callback(new Error('请输入正确的邮箱!'))
        } else {
          callback()
        }
      },
      // 身份证的验证规则
      id: function (rule, value, callback) {
        if (!value) {
          return callback(new Error('身份证不能为空'))
        }

        if (!id.test(value)) {
          callback(new Error('请输入正确身份证号码'))
        } else {
          callback()
        }
      },
      // 电话号码的验证
      phone: (rule, value, callback) => {
        if (!value) {
          return callback(new Error('电话号码不能为空'))
        }

        if (!phone.test(value = value.replace(/(^\s+)|(\s+$)/g, ""))) {
          callback(new Error('请正确填写电话号码'))
        } else {
          callback()
        }
      },
      // 网址
      url: (rule, value, callback) => {
        if (!value) {
          return callback()
        }
        if (!url.test(value)) {
          callback(new Error('网址格式不正确'))
        } else {
          callback()
        }
      },
      password: (rule, value, callback) => {
        if (value === '') {
          callback(new Error('密码不能为空'))
        } else {
          var reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,15}$/
          if (reg.test(value)) {
            callback()
          } else {
            callback(new Error('密码格式错误,请输入6-15位字母和数字'))
          }
        }
      }
    }
  }

  // FromOne表单验证规则  用于FromOne个性化的校验

  FormValidate.FormOne = function () {
    return {
      // 可以为空的验证2

      // 身份证的验证规则
      id: function (rule, value, callback) {
        if (value == '') {
          callback(new Error('请输入身份证号'))
        } else {
          if (!id.test(value)) {
            callback(new Error('请输入正确身份证号码'))
          } else {
            callback()
          }
        }
      },
      // 电话号码的验证
      phone: (rule, value, callback) => {
        if (value == '') {
          callback(new Error('电话不能为空'))
        } else {
          if (!phone.test(value)) {
            callback(new Error('请正确填写电话号码'))
          } else {
            callback()
          }
        }
      },
      Email: function (rule, value, callback) {
        if (value == '') {
          callback()
        } else {
          if (!email.test(value)) {
            callback(new Error('请填写正确的邮箱'))
          } else {
            callback()
          }
        }
      }
    }
  }

  // FromTwo表单验证规则  用于FromTwo表单个性化的校验

  FormValidate.FormTwo = function () {
    return {
      // 传真的校验规则

      Fax: (rule, value, callback) => {
        if (!value) {
          return callback(new Error('传真不能为空'))
        }

        if (!fax.test(value)) {
          callback(new Error('请正确填写传真'))
        } else {
          callback()
        }
      }
    }
  }

  return FormValidate
})()

export default {
  FormValidate: FormValidate
}
